{
  config,
  stdenv,
  lib,
  fetchurl,
  intltool,
  pkg-config,
  python3Packages,
  bluez,
  gtk3,
  obex_data_server,
  xdg-utils,
  dnsmasq,
  dhcpcd,
  iproute2,
  adwaita-icon-theme,
  librsvg,
  wrapGAppsHook3,
  gobject-introspection,
  networkmanager,
  withPulseAudio ? config.pulseaudio or stdenv.hostPlatform.isLinux,
  libpulseaudio,
  procps,
}:

let
  pythonPackages = python3Packages;

in
stdenv.mkDerivation rec {
  pname = "blueman";
  version = "2.4.6";

  src = fetchurl {
    url = "https://github.com/blueman-project/blueman/releases/download/${version}/${pname}-${version}.tar.xz";
    sha256 = "sha256-xxKnN/mFWQZoTAdNFm1PEMfxZTeK+WYSgYu//Pv45WY=";
  };

  nativeBuildInputs = [
    gobject-introspection
    intltool
    pkg-config
    pythonPackages.cython
    pythonPackages.wrapPython
    wrapGAppsHook3
  ];

  buildInputs = [
    bluez
    gtk3
    pythonPackages.python
    librsvg
    adwaita-icon-theme
    networkmanager
    procps
  ]
  ++ pythonPath
  ++ lib.optional withPulseAudio libpulseaudio;

  postPatch = lib.optionalString withPulseAudio ''
    sed -i 's,CDLL(",CDLL("${libpulseaudio.out}/lib/,g' blueman/main/PulseAudioUtils.py
  '';

  pythonPath = with pythonPackages; [
    pygobject3
    pycairo
  ];

  propagatedUserEnvPkgs = [ obex_data_server ];

  configureFlags = [
    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
    # Don't check for runtime dependency `ip` during the configure
    "--disable-runtime-deps-check"
    (lib.enableFeature withPulseAudio "pulseaudio")
  ];

  makeWrapperArgs = [
    "--prefix PATH ':' ${
      lib.makeBinPath [
        dnsmasq
        dhcpcd
        iproute2
      ]
    }"
    "--suffix PATH ':' ${lib.makeBinPath [ xdg-utils ]}"
  ];

  postFixup = ''
    # This mimics ../../../development/interpreters/python/wrap.sh
    wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
    wrapPythonProgramsIn "$out/libexec" "$out $pythonPath"
  '';

  meta = {
    homepage = "https://github.com/blueman-project/blueman";
    description = "GTK-based Bluetooth Manager";
    license = lib.licenses.gpl3;
    platforms = lib.platforms.linux;
    changelog = "https://github.com/blueman-project/blueman/releases/tag/${version}";
    maintainers = [ ];
  };
}
